package accion;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

import bean.Residente;

public class ResidenteAccion {

	private ArrayList<Residente> listaResidentes = new ArrayList<Residente>();
	private String rutaResidente = "C:/BD/residente.txt";

	public ArrayList<Residente> inicializarTablaResidente() {

		FileReader fr = null;
		BufferedReader br = null;

		try {
			fr = new FileReader(rutaResidente);
			br = new BufferedReader(fr);

			String linea;
			Residente residente = null;
			while ((linea = br.readLine()) != null) {
				String[] datos = linea.split("#");
				residente = new Residente(datos[0], datos[1], datos[2],
						datos[3], Integer.parseInt(datos[4]), datos[5],
						datos[6]);

				listaResidentes.add(residente);

			}

		} catch (FileNotFoundException e) {

			e.printStackTrace();
		} catch (IOException e) {

			e.printStackTrace();
		} finally {

			try {
				if (null != fr) {
					fr.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}

		return listaResidentes;

	}

	public int ingresarResidente(Residente residente) {

		int ingreso = 0;

		if (existeResidente(residente) == false) {
			listaResidentes.add(residente);
			ingreso = 1;
		}
		actualizarTablaResidente();
		return ingreso;
	}

	public int actualizarResidente(Residente residente) {

		int actualizacion = 0;

		int indiceDeLista = -1;

		int indiceaEliminarDeLista = 0;

		for (Residente residenteDeLista : listaResidentes) {
			indiceDeLista++;
			if (residenteDeLista.getDni().equals(residente.getDni())) {

				indiceaEliminarDeLista = indiceDeLista;

				actualizacion = 1;

			}
		}

		listaResidentes.remove(indiceaEliminarDeLista);
		listaResidentes.add(indiceaEliminarDeLista, residente);
		actualizarTablaResidente();

		return actualizacion;
	}
	
	

	public void actualizarTablaResidente() {
		try {
			PrintWriter pw = new PrintWriter(new FileWriter(rutaResidente));

			for (Residente residenteDeLista : listaResidentes) {
				pw.println(residenteDeLista.getDni() + "#"
						+ residenteDeLista.getApellidoPaterno() + "#"
						+ residenteDeLista.getApellidoMaterno() + "#"
						+ residenteDeLista.getNombre() + "#"
						+ residenteDeLista.getEdad() + "#"
						+ residenteDeLista.getCorreo() + "#"
						+ residenteDeLista.getClave() + "#");
			}
			pw.close();

		} catch (Exception ex) {

		}
	}

	public boolean existeResidente(Residente residente) {

		boolean existeResidente = false;

		for (Residente residenteDeLista : listaResidentes) {
			if (residenteDeLista.getDni().equals(residente.getDni())
					|| residenteDeLista.getCorreo().equals(
							residente.getCorreo())) {
				existeResidente = true;
			}
		}

		return existeResidente;

	}

	public Residente obtenerResidente(Residente residente) {

		Residente residenteObtenido = null;

		for (Residente residenteDeLista : listaResidentes) {

			if (residenteDeLista.getDni().equals(residente.getDni())) {

				residenteObtenido = residenteDeLista;

			}
		}

		return residenteObtenido;
	}

}
